/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Creditos;

import Productos.CProducto;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.SQLException;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

/**
 *
 * @author alrojas
 */
public class IPrincipal extends JFrame{
 
    private JLabel      buscarLab;
    private JTextField  buscarCam;
    private JTable      listaTab;
    private TableRowSorter<TableModel> clasificador;
    private JButton     detalleBut;
    
    public IPrincipal(JFrame padre) throws HeadlessException {
        
        this.setLayout(new GridBagLayout());
        this.setTitle("Créditos");
        
        inicializarComponentes();
        inicializarListeners(padre);
        
        this.pack();
        this.setLocationRelativeTo(null);
        this.setVisible(true);

    }
    
    public void inicializarComponentes(){
        try {
            GridBagConstraints limites = new GridBagConstraints();
            limites.insets = new Insets(2, 2, 2, 2);
        
            buscarLab = new JLabel("Buscar Crédito (Alt + B)"); buscarLab.setDisplayedMnemonic('B'); 
            limites.gridx = 0; limites.gridy = 0;
            add(buscarLab,limites);
            
            buscarCam = new JTextField(30); buscarLab.setLabelFor(buscarCam);
            limites.gridx = 1;
            add(buscarCam,limites);
            
            limites.fill = GridBagConstraints.BOTH;

            detalleBut = new JButton("Detalle", new ImageIcon("figuras/details32.png"));
            detalleBut.setHorizontalTextPosition(SwingConstants.CENTER);
            detalleBut.setVerticalTextPosition(SwingConstants.BOTTOM) ;
            detalleBut.setVerticalAlignment(SwingConstants.CENTER); 
            limites.gridx = 2; limites.gridy = 2;
            add(detalleBut,limites);
            
            Vector<String> columnNames = new Vector<String>(); columnNames.add("Código"); columnNames.add("I. Mensual (%)"); columnNames.add("I. Mora (%)"); columnNames.add("# Cuotas"); columnNames.add("Monto");
            Vector <Vector<String>> creditos = CCredito.dameTodo();
            DefaultTableModel modelo = new DefaultTableModel(creditos,columnNames){
                
                @Override
                public boolean isCellEditable (int row, int column)
                {
                    return false;
                }
            };
            
            this.clasificador = new TableRowSorter<TableModel>(modelo);
            listaTab = new JTable(modelo); listaTab.changeSelection(0,0,false,true); listaTab.setRowSorter(clasificador); listaTab.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            ((DefaultTableCellRenderer)listaTab.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(JLabel.CENTER);
            limites.gridx = 0; limites.gridy = 1; limites.gridwidth = 2; limites.gridheight = 3;
            JScrollPane barras = new JScrollPane(listaTab); barras.setPreferredSize(new Dimension(600,250));
            add(barras,limites);
        
        } catch (SQLException ex) {
            Logger.getLogger(Productos.IPrincipal.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Productos.IPrincipal.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void inicializarListeners(final JFrame padre){
        
        if (padre != null){
            
            listaTab.addMouseListener(new MouseAdapter(){
                public void mouseClicked(MouseEvent e){ 
                    if (e.getClickCount() == 2){
                        // Las siguientes lineas son un asco!, iuuuu!
                        /*final Ventas.IVenta padreReal = (Ventas.IVenta) padre;
                        if(!padreReal.yaEstaAgregado(Integer.parseInt(listaTab.getValueAt(listaTab.getSelectedRow(),0).toString()))){
                            padreReal.agregarProducto(Integer.parseInt(listaTab.getValueAt(listaTab.getSelectedRow(),0).toString()));
                            setVisible(false);
                        }*/
                    }
                }
            });
        }
        
        buscarCam.getDocument().addDocumentListener(
            new DocumentListener() {
                public void changedUpdate(DocumentEvent e) {
                    filtrar();
                }
                public void insertUpdate(DocumentEvent e) {
                    filtrar();
                }
                public void removeUpdate(DocumentEvent e) {
                    filtrar();
                }
        });
        
        detalleBut.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                
                if(listaTab.getSelectedRowCount() > 0){
                    try {
                        //Integer.valueOf();
                        new IDetalle(Integer.valueOf(listaTab.getValueAt(listaTab.getSelectedRow(),0).toString()));
                        
                        //new IEditar(Creditos.IPrincipal.this,CProducto.dameUno(Integer.parseInt(listaTab.getValueAt(listaTab.getSelectedRow(),0).toString())));
                    } catch (HeadlessException ex){
                        Logger.getLogger(Productos.IPrincipal.class.getName()).log(Level.SEVERE, null, ex);
                    } 
                }
                else{
                    JOptionPane.showMessageDialog(null,"Seleccione 1 crédito!","Aviso",JOptionPane.WARNING_MESSAGE);    
                }
            }
        } );

    }
    
    private void filtrar(){
        
        RowFilter<TableModel, Object> rf = null;
        try {
            rf = RowFilter.regexFilter(buscarCam.getText());
        } catch (java.util.regex.PatternSyntaxException e) {
            return;
        }
        clasificador.setRowFilter(rf);
    }
    
    public void actualizar() throws SQLException, ClassNotFoundException{
            
        Vector<String> columnNames = new Vector<String>(); columnNames.add("Código"); columnNames.add("N. Comercial"); columnNames.add("N. Genérico"); columnNames.add("Existencias"); columnNames.add("Presentación"); columnNames.add("Laboratorio");     
        Vector <Vector<String>> data = CProducto.dameTodo();

        DefaultTableModel modelo = new DefaultTableModel(data,columnNames){

            @Override
            public boolean isCellEditable (int row, int column)
            {
                return false;
            }
        };

        clasificador = new TableRowSorter<TableModel>(modelo);
        listaTab.setModel(modelo); listaTab.changeSelection(0,0,false,true); listaTab.setRowSorter(clasificador); listaTab.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        
    }
    
}
